package com.java.second_goods.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java.second_goods.common.utils.StringUtils;
import com.java.second_goods.entity.Favorite;
import com.java.second_goods.mapper.FavoriteMapper;
import com.java.second_goods.service.FavoriteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * 收藏 服务层实现
 */
@Service
public class FavoriteServiceImpl extends ServiceImpl<FavoriteMapper, Favorite> implements FavoriteService {

    @Autowired
    private FavoriteMapper favoriteMapper;

    /**
     * 查询收藏信息
     *
     * @param id 收藏ID
     * @return 收藏信息
     */
    @Override
    public Favorite selectFavoriteById(Integer id) {
        return favoriteMapper.selectById(id);
    }

    /**
     * 查询收藏列表
     *
     * @param favorite 收藏信息
     * @return 收藏集合
     */
    @Override
    public List<Favorite> selectFavoriteList(Favorite favorite) {
        LambdaQueryWrapper<Favorite> queryWrapper = new LambdaQueryWrapper<>();
        // 构建查询条件
        if (favorite != null) {
            if (favorite.getUserId() != null) {
                queryWrapper.eq(Favorite::getUserId, favorite.getUserId());
            }
            if (favorite.getItemId() != null) {
                queryWrapper.eq(Favorite::getItemId, favorite.getItemId());
            }
            if (StringUtils.isNotEmpty(favorite.getType())) {
                queryWrapper.eq(Favorite::getType, favorite.getType());
            }
        }
        // 按创建时间降序排列
        queryWrapper.orderByDesc(Favorite::getCreateTime);
        return favoriteMapper.selectList(queryWrapper);
    }

    /**
     * 根据用户ID查询收藏列表
     *
     * @param userId 用户ID
     * @param type 收藏类型
     * @return 收藏列表
     */
    @Override
    public List<Favorite> selectFavoritesByUserId(Integer userId, String type) {
        return favoriteMapper.selectFavoritesByUserId(userId, type);
    }

    /**
     * 新增收藏
     *
     * @param favorite 收藏信息
     * @return 结果
     */
    @Override
    public int insertFavorite(Favorite favorite) {
        // 检查是否已收藏
        Boolean exist = checkFavorite(favorite.getUserId(), favorite.getItemId(), favorite.getType());
        if (exist) {
            return 0; // 已收藏，不再添加
        }
        return favoriteMapper.insert(favorite);
    }

    /**
     * 删除收藏信息
     *
     * @param id 收藏ID
     * @return 结果
     */
    @Override
    public int deleteFavoriteById(Integer id) {
        return favoriteMapper.deleteById(id);
    }

    /**
     * 批量删除收藏信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteFavoriteByIds(Integer[] ids) {
        return favoriteMapper.deleteBatchIds(Arrays.asList(ids));
    }

    /**
     * 检查是否已收藏
     *
     * @param userId 用户ID
     * @param itemId 收藏项ID
     * @param type 收藏类型
     * @return 是否已收藏
     */
    @Override
    public Boolean checkFavorite(Integer userId, Integer itemId, String type) {
        return favoriteMapper.checkFavorite(userId, itemId, type);
    }

    /**
     * 删除收藏
     *
     * @param userId 用户ID
     * @param itemId 收藏项ID
     * @param type 收藏类型
     * @return 结果
     */
    @Override
    public int deleteFavorite(Integer userId, Integer itemId, String type) {
        return favoriteMapper.deleteFavorite(userId, itemId, type);
    }
}